package Controlador;

import Dao.DaoViaje;
import Modelo.Chofer;
import Modelo.Listas;
import Modelo.Validaciones;
import Modelo.Viaje;
import PackageConeccion.ConeccionBD;
import Reportes.ReporteCalenAsigVehiculo;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ControladorReporteCalenAsigVehiculo implements ActionListener {

    private ReporteCalenAsigVehiculo formCalendario;
    private Listas LisTer;
    //private LinkedList<Viaje> listaOrdenada;

    public ControladorReporteCalenAsigVehiculo(Listas LisTerminal) {
        LisTer = LisTerminal;

        formCalendario = new ReporteCalenAsigVehiculo();

        formCalendario.agregarListener(this);
        formCalendario.setVisible(true);
        formCalendario.getDateFechaInicio().setEnabled(false);
        formCalendario.getDateFechaFinal().setEnabled(false);
        formCalendario.getCmbMeses().setEnabled(false);
    }

//---------------------
    private void Mostrar() throws SQLException {
        limpiarTabla();
        String sql, tiraSQL,placa, chofer, destino;
        Date FechaI, FechaF;
        int Fila = 0;
        Date Fecha;
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        //ResultSet rgViaje = null;

        if (formCalendario.getOpcionIntervalo().isSelected() == true) {
            ResultSet rgViaje = null;
            if (formCalendario.getDateFechaInicio().getDate() == null) {
                Mensajes.Aviso("Ingrese una fecha inicial", "");
                return;
            }
            if (formCalendario.getDateFechaFinal().getDate() == null) {
                Mensajes.Aviso("Ingrese una fecha final", "");
                return;
            }
            FechaI = formCalendario.getDateFechaInicio().getDate();
            FechaF = formCalendario.getDateFechaFinal().getDate();
            if (FechaI.after(FechaF)) {
                Mensajes.Aviso("La fecha Inicial no puede ser mayor a la Final", "");
                return;
            }
            
            //tiraSQL = "SELECT fechasalida, placavehiculo, cedulaempleado, destino FROM viaje WHERE fechasalida BETWEEN '" + FechaI + "' AND '" + FechaF + "'";
            DaoViaje daoviaje=new DaoViaje();
            rgViaje = daoviaje.ConsultarViajeXFecha(FechaI, FechaF);
            while (rgViaje.next()) {
                Fecha = rgViaje.getDate("fechasalida");
                placa = rgViaje.getString("placavehiculo");
                chofer = rgViaje.getString("cedulaempleado");
                destino = rgViaje.getString("destino");
                formCalendario.getjTableCalendario().setValueAt(Fecha, Fila, 0);
                formCalendario.getjTableCalendario().setValueAt(placa, Fila, 1);
                formCalendario.getjTableCalendario().setValueAt(chofer, Fila, 2);
                formCalendario.getjTableCalendario().setValueAt(destino, Fila, 3);
                rgViaje.next();
                Fila++;
            }

        } else if (formCalendario.getOpcionMeses().isSelected() == true) {
            limpiarTabla();
            ResultSet rgViaje = null;
            if (formCalendario.getCmbMeses().getSelectedIndex() <= 0) {
                Mensajes.Aviso("Seleccione un mes", "");
                return;
            }
            int Fila1 = 0;
            int mesCombo = formCalendario.getCmbMeses().getSelectedIndex();
            tiraSQL = "SELECT fechasalida, placavehiculo, cedulaempleado, destino FROM viaje WHERE extract (MONTH FROM fechasalida) = '" + mesCombo + "' ";
            rgViaje = ConeccionBD.consultar(tiraSQL);
            try{
            while (rgViaje.next()) {
                Fecha = rgViaje.getDate("fechasalida");
                placa = rgViaje.getString("placavehiculo");
                chofer = rgViaje.getString("cedulaempleado");
                destino = rgViaje.getString("destino");
                formCalendario.getjTableCalendario().setValueAt(Fecha, Fila1, 0);
                formCalendario.getjTableCalendario().setValueAt(placa, Fila1, 1);
                formCalendario.getjTableCalendario().setValueAt(chofer, Fila1, 2);
                formCalendario.getjTableCalendario().setValueAt(destino, Fila1, 3);
                Fila1++;
                rgViaje.next();
            }
            }
		catch(SQLException e)
                {
			e.printStackTrace();
		}
        } else {
            Mensajes.Aviso("Seleccione una opcion de periodo del reporte", "");
            return;
        }

    }

    private void limpiarTabla() {
        for (int i = 0; i < formCalendario.getjTableCalendario().getRowCount(); i++) {
            formCalendario.getjTableCalendario().setValueAt("", i, 0);
            formCalendario.getjTableCalendario().setValueAt("", i, 1);
            formCalendario.getjTableCalendario().setValueAt("", i, 2);
            formCalendario.getjTableCalendario().setValueAt("", i, 3);
        }
    }

    private void enabled(boolean b) {
        formCalendario.getCmbMeses().setEnabled(!b);
        formCalendario.getDateFechaFinal().setEnabled(b);
        formCalendario.getDateFechaInicio().setEnabled(b);
    }
//---------------------

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formCalendario.getjButtonMostrar())) {
            try {
                Mostrar();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorReporteCalenAsigVehiculo.class.getName()).log(Level.SEVERE, null, ex);
            }
            return;
        }
        if (e.getSource().equals(formCalendario.getOpcionIntervalo())) {
            enabled(true);
            return;
        }
        if (e.getSource().equals(formCalendario.getOpcionMeses())) {
            enabled(false);
            return;
        }
    }
}
